package com.huang.leetcode.doublePointer;

/**
 * @Author：CreateSequence
 * @Date：2020-07-30 20:54
 * @Description：合并两个有序数组
 */
public class PB88 {


    public void merge(int[] nums1, int m, int[] nums2, int n) {

        /**
         * 1.创建指针p1，p2分别指向num1和num2的有效数字尾部，指针p指向num1中m+n-1的位置
         * 2.从大到小排序，比较p1与p2大小：
         * 2.1如果p1大，就让p1的值赋给p，移动p1和p
         * 2.1如果p2大，就让p2的值赋给p，移动p2和p
         * 3.如果num2遍历完了，就直接退出循环，否则就把num2直接合并到num1中
          */

        int p1 = m - 1;
        int p2 = n - 1;
        int p = m + n - 1;
        while (p1 >= 0 && p2 >= 0) {
            //如果p1大于p2
            if (nums1[p1] > nums2[p2]) {
                nums1[p--] = nums1[p1--];
            }else {
                nums1[p--] = nums2[p2--];
            }
        }
        System.arraycopy(nums2, 0, nums1, 0, p2 + 1);
    }

}
